Virtual servers (a.k.a. virtual machines) were one of the early steps used for computer virtualization. Logically, a virtual server appears like a separate computer, having its own IP address. The virtual server includes not only the application and the necessary binary application software and libraries to run the application, but an entire guest operating system. This kind of virtual server is resource heavy and rather slow to set up. It also requires a separate license for the operating system for each virtual server, which typically increases cost.
Use of containers is a more recently introduced method of virtualization of computers or, more specifically, computer software applications. A container separate the application from the operating system and the physical infrastructure it uses to connect to the computing network. The container is instantiated within the kernel of the operating system, and it virtualizes the instance of an application. The container doesn't include the operating system like a virtual machine does. Use of containers enable running multiple applications using same host computer resources, without the applications interfering each other. Typically, the container doesn't have an externally available IP address of its own, although it has a unique ID that may be used by the host. Therefore, a client cannot access the container directly. Rather, the server/host manages the container, and the container manages the application code.
An example of such container is Linux Containers LXC. LXC leverages container groups (cgroups) to isolate the CPU, memory, file/block IO and network resources. Namespaces are used to isolate application from the operating system, so that network access, process trees, user IDs and file access are separated.
Orchestration platform provides to developers and system administrators a tool for building and shipping distributed applications, and it may provide an application programming interface (API) to the programmers and developers for provisioning of container groups.
Containers may be placed on a host using a container deployment tool, which is a service run on virtual host(s). Orchestration platform communicates with the container deployment tool via a standardized interface using a protocol. For example, HTTP protocol may be used over a defined application programming interface (API) in a REST architecture. Such interface is also often called as a RESTful API. Also data format(s) to be used in the standardized interface shall be agreed. An example of a data format useful in such interface is JavaScript object notation JSON, but any suitable existing or future data format may equally be selected.
When a container is placed on a host, it's given an address and subnet that is unique within the host. Container interface is a virtual Ethernet bridge that automatically forwards packets between any other network interfaces that are attached to it, so that containers may communicate with the host machine and with each other.
While using containers, users can build any application in any computer language, using any software development tools. With use of a container system, the application becomes portable, and can run anywhere, with any operating system, such as, in example, Windows, Ubuntu or Red Hat.